package com.yf.heap;

/*
1. Java堆区用于存储Java对象实例，那么堆的大小在JVM启动时就已经设定好了，大家可以通过选项"-Xmx"和"-Xms"来进行设置。
    “-Xms"用于表示堆区的起始内存，等价于-XX:InitialHeapSize
    “-Xmx"则用于表示堆区的最大内存，等价于-XX:MaxHeapSize

2. 一旦堆区中的内存大小超过“-Xmx"所指定的最大内存时，将会抛出OutOfMemoryError异常。
    通常会将-Xms和-Xmx两个参数配置相同的值， 如：-Xms512m -Xmx512m
    其目的是为了避免在生产环境由于heap内存扩大或缩小导致应用停顿，降低延迟，同时避免每次垃圾回收完成后JVM重新分配内存。

3. 默认情况下
    初始内存大小：物理电脑内存大小 / 64
    最大内存大小：物理电脑内存大小 / 4

4. 查看设置的参数：
   4.1 jsp; jstat -gc 进程id
   4.2 -XX:+PrintGCDetails
        jvm运行参数：-Xms512m -Xmx512m -XX:+PrintGCDetails

 */
public class HeapSpaceInitial {
    public static void main(String[] args) {
        // 返回java虚拟机中堆内存总量
        long memoryStart = Runtime.getRuntime().totalMemory() / 1024 / 1024;
        // 返回java虚拟机试图使用的最大堆内存量
        long memoryMax = Runtime.getRuntime().maxMemory() / 1024 / 1024;

        System.out.println("-Xms:" + memoryStart + "M");
        System.out.println("-Xmx:" + memoryMax + "M");

        System.out.println("系统内存大小为：" + memoryStart * 64.0 / 1024 + "G");
        System.out.println("系统内存大小为：" + memoryMax * 4.0 / 1024 + "G");
    }
}
